home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
(A)P
/
(A)P1.ADF
/
Cycloids
/
hypo2.c
next >
Wrap
C/C++ Source or Header
|
1987-05-25
|
3KB
|
168 lines
/* hypo2.c */
double b,bc,c2,d,st,t;
int aa, bb;
int s = 4;
int nr,fnx(),fny(),c1,n1;
extern int SPAdd(),SPDiv(),SPMul(),SPSub(),SPTieee(),SPFieee();
extern int SPSin(),SPCos();
void doepic(),epic();
extern double bf,cf,dd,bl,l,z;
extern int an,bd,col,cc,rr,ex;
union kludge5
{
FLOAT num5;
int i5;
} k5;
union kludge6
{
FLOAT num6;
int i6;
} k6;
void epic()
{
int h,v;
h=fnx(0)+65;
v=185-fny(0);
SetAPen(rp,s);
Move(rp,h,v);
st=b/nr;
ex=0;
t=st;
while (t<=b+st){
h=fnx(t)+65;
v=185-fny(t);
Draw(rp,h,v);
t+=st;
}
}
fillscreen()
{
SetAPen(rp,4);
SetDrMd(w->RPort,JAM1);
RectFill(w->RPort,0,0,320,200);
}
precalculate()
{
int n2;
c1=aa-bb;
c2=(double)c1/bb;
b=2.0*PI*bb;
n1=-aa;
n2=aa;
d=(n2-n1)/180.0;
nr=25*(aa+bb);
if (nr>400)
nr=401;
z=1.0;
if (an!=0)
dd=360.0/an;
else
dd=360.0;
z=z-(cc/dd);
bd=bb;
bl=bb-bf*bb;
rr=1;
z=z+(cc/dd);
bc=bl-(cf*bd*(rr/dd));
l=(2*PI*an*rr)/360.0;
}
void doepic()
{
while ((rr*an)<360){
ex = stopcheck();
if (ex==1)
break;
++rr;
++s;
if (s>(col+4))
s=5;
z=z+(cc/dd);
bc=bl-(cf*bd*((rr-1)/dd));
l=(2*PI*an*rr)/360.0;
epic();
}
}
int fnx(t)
double t;
{
k1.num1=t;
k2.num2=c2;
k5.num5=l;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k5.i5=SPFieee(k5.i5);
k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
k4.i4=SPCos(k2.i2); /* cos(t*c2+l) */
k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
k3.i3=SPCos(k2.i2); /* cos(t+l) */
k1.num1=c1;
k2.num2=bc;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k5.i5=SPMul(k1.i1,k3.i3); /* c1*cos(t+l) */
k6.i6=SPMul(k2.i2,k4.i4); /* bc*cos(t*c2+l) */
k3.i3=SPAdd(k6.i6,k5.i5);
k1.num1=n1;
k2.num2=d;
k6.num6=z;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k6.i6=SPFieee(k6.i6);
k4.i4=SPDiv(k6.i6,k3.i3);
k3.i3=k4.i4;
k4.i4=SPSub(k1.i1,k3.i3);
k5.i5=SPDiv(k2.i2,k4.i4);
k5.i5=SPTieee(k5.i5);
return (int)k5.num5;
}
int fny(t)
double t;
{
k1.num1=t;
k2.num2=c2;
k5.num5=l;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k5.i5=SPFieee(k5.i5);
k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
k4.i4=SPSin(k2.i2); /* sin(t*c2+l) */
k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
k3.i3=SPSin(k2.i2); /* sin(t+l) */
k1.num1=c1;
k2.num2=bc;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k5.i5=SPMul(k1.i1,k3.i3); /* c1*sin(t+l) */
k6.i6=SPMul(k2.i2,k4.i4); /* bc*sin(t*c2+l) */
k3.i3=SPSub(k6.i6,k5.i5);
k1.num1=n1;
k2.num2=d;
k6.num6=z;
k1.i1=SPFieee(k1.i1);
k2.i2=SPFieee(k2.i2);
k6.i6=SPFieee(k6.i6);
k4.i4=SPDiv(k6.i6,k3.i3);
k3.i3=k4.i4;
k4.i4=SPSub(k1.i1,k3.i3);
k5.i5=SPDiv(k2.i2,k4.i4);
k1.num1=.5;
k1.i1=SPFieee(k1.i1);
k3.i3=SPAdd(k1.i1,k5.i5);
k3.i3=SPTieee(k3.i3);
return (int)k3.num3;
}